home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NetNews Offline 2
/
NetNews Offline Volume 2.iso
/
news
/
comp
/
std
/
c
/
151
< prev
next >
Wrap
Text File
|
1996-08-06
|
3KB
|
75 lines
Path: boy.nmd.msu.ru!not-for-mail
From: krotoff@such.srcc.msu.su (Alexander Krotoff)
Newsgroups: comp.std.c
Subject: ... char * * promotion to char const * const * ...
Date: 19 Jan 1996 13:33:44 +0300
Organization: Research Computer Center, Moscow State University
Sender: krotoff@boy.nmd.msu.ru
Message-ID: <4dns28$3c5@boy.nmd.msu.ru>
References: <4dgj8q$qin@unix.sri.com> <KANZE.96Jan17121659@slsvewt.lts.sel.alcatel.de> <DLBzGB.J60@polo.demon.co.uk>
Reply-To: krotoff@such.srcc.msu.su (Alexander Krotoff)
NNTP-Posting-Host: boy.nmd.msu.ru
X-InCommentTo: john@polo.demon.co.uk (John Winters)
john@polo.demon.co.uk (John Winters) wrote:
> In article <KANZE.96Jan17121659@slsvewt.lts.sel.alcatel.de>,
> James Kanze US/ESC 60/3/141 #40763 <kanze@lts.sel.alcatel.de> wrote:
> [snip]
> >
> >Originally, the C standard was going to allow this; in fact, it was
> >going to allow all casts which added const anywhere in the type. Then
> >someone pointed out that the conversion 'char ** -> char *const *' was
> >unsafe. As a result, the wording was changed to only allow adding the
> >const at the top level.
>
> Interesting. Could you enlighten us (well, me anyway) as to *why* it
> is unsafe. I don't find it immediately obvious.
Hello Joshn.
here is an example Joe Buck sent me this Julay.
i did not understand it too before.
i think it is quite simple and clean.
Regards,
--
Alexander N. Krotoff
Research Computer Center
Moscow State University
-------------------------------------------------------------------
From: Joe Buck <jbuck@Synopsys.COM>
Message-Id: <199507211636.JAA17469@deerslayer.synopsys.com>
Subject: Re: pointer conversions (minor)
To: krotoff@such.srcc.msu.su (Alexander Krotoff)
Date: Fri, 21 Jul 95 9:36:39 PDT
In-Reply-To: <9507211206.AA00906@such.srcc.msu.su>; from "Alexander Krotoff" at Jul 21, 95 3:10 pm
X-Mailer: ELM [version 2.3 PL11]
> As seems to me it's failed just becouse `ch_p' and `ch_pp' are never
> initialized ;-) Is your example complete ?
I apologize for the error. Here is a correct example. I saw the
segmentation fault and assumed it was due to accessing the const,
but the const object is on the stack so it's not in read-only memory.
#include <iostream.h>
int main() {
const char ** const_ch_pp;
char * ch_p;
char ** ch_pp = & ch_p;
const char const_ch = 'a';
const char * const_ch_p = &const_ch;
cout << "const_ch_p points to " << *const_ch_p << endl;
const_ch_pp = ch_pp; // illegal, but you want it legal
*const_ch_pp = const_ch_p; // copy const ptr to non-const ptr
*ch_p = 'b'; // now we can change the const object
cout << "const_ch_p points to " << *const_ch_p << endl;
}
It's simply not debatable: it is unsafe to assign a char** to a const char**.
--------------------------------------------------------------------